Pytanie:
Jak sparametryzować tekst w ponownie używanej sekcji notatek Lilypond?
jbm
2013-10-30 08:32:04 UTC
view on stackexchange narkive permalink

Oto krótki fragment Lilypond, który moim zdaniem wyraża zamiar tego, co chcę zrobić.

  verseNotes = \ relative c '{d ^ \ markup {\ verseText} dd d16 d d8 a r4 | cis8 cis cis cis16 cis cis8 a r4 |} verseSection = \ względne c '{\ powtórz volta 2 {\ verseNotes} gis, 1 | gis4. b8 ~ b2 | \ repeat volta 3 {verseText = "Verse (powtórz 2x)" \ verseNotes}} \ relative c '{verseText = "Verse" \ verseSection}  

To oczywiście błędy.

Myślę, że przyczyną jest coś w rodzaju verseNotes , które jest związane w czasie przetwarzania, a \ verseText nie ma w tym momencie żadnej wartości. Chciałbym ponownie użyć zmiennej verseNotes, ale z różnymi wartościami verseText.

Myślę, że chcę „dynamicznego” odpowiednika jakiejś funkcji, do której przekazuję parametr tekstowy . Widzę różne sekcje w dokumentacji Lilypond wyrażające rzeczy w Scheme, ale to prawdopodobnie ostatnia rzecz, którą chciałbym robić podczas wchodzenia do muzyki.

Dwa odpowiedzi:
PeterBjuhr
2013-10-30 13:31:41 UTC
view on stackexchange narkive permalink

Tak, masz rację - musisz zadeklarować zmienną przed jej użyciem. Mam nadzieję, że to pomoże:

 verseText = "Verse" verseNotes = \ względne c '{d8 ^ \ markup {\ verseText} d d d16 d d8 a r4 | cis8 cis cis cis16 cis cis8 a r4 | } verseSection = \ względne c '{\ powtórz volta 2 {\ verseNotes} gis'1 | gis4. b8 ~ b2 | } \ score {\ new Staff \ verseSection} 

Dalsze rozwiązanie Piotra, 7 listopada 2013 r .:

 verseNotes = \ względne c '{d8 d d d16 d d8 a r4 | cis8 cis cis cis16 cis cis8 a r4 |} verseSection = \ względne c '{\ override Score.RehearsalMark #' self-alignment-X = #LEFT \ mark \ markup {\ normalsize "Verse"} \ repeat volta 2 {\ verseNotes } gis'1 | gis4. b8 ~ b2 | \ mark \ markup {\ normalsize "Verse (repeat 2x)"} \ repeat volta 3 {\ verseNotes}} \ score {\ new Staff \ verseSection} 
User8773
2014-02-02 15:15:03 UTC
view on stackexchange narkive permalink
Widzę różne sekcje w dokumentacji Lilypond wyrażające rzeczy w Scheme, ale jest to prawdopodobnie ostatnia rzecz, którą chcę robić podczas wchodzenia do muzyki.

Lepiej się do tego przyzwyczaić. Na czystym poziomie LilyPond możesz przypisać tylko statyczne wyrażenia muzyczne. Chociaż można wprowadzić trochę wariacji do tych używających \ tag , tak naprawdę nie jest to parametryzacja.

Zwykle nie trzeba „wyrażać rzeczy” podczas wprowadzania muzyki i vice versa: całkiem wykonalne jest napisanie Schematu dla rzeczy schematycznych (mianowicie parametryzacji) i muzyki dla rzeczy muzycznych, używając # { ... #} rozsądnie.

W tym przypadku wyglądałoby to (po kilku drobnych poprawkach dotyczących oktawy, czasu trwania i kontekstu):

 verseNotes = # (define-music-function (lokalizacja parsera verseText) (znaczniki?) # {\ względne c '{d8 ^ \ markup {#verseText} dd d16 d d8 a r4 | cis8 cis cis cis16 cis cis8 a r4 |} #}) verseSection = # (define-music-function (lokalizacja parsera verseText) (znaczniki ?) # {\ relative c '{\ repeat volta 2 {\ verseNotes #verseText} gis1 | gis4. b8 ~ b2 | \ repeat volta 3 {\ verseNotes "Verse (powtórz 2x)"}} #}) \ relative c' {\ new Staff \ verseSecti on "Verse"} 

Jak widać, kod Scheme kompresuje się do pojedynczych wierszy, których można się łatwo nauczyć na pamięć i które są tylko umiarkowanie irytujące.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...