Autor Thema: \set-Befehl  (Gelesen 1702 mal)

chf

  • Member
\set-Befehl
« am: Donnerstag, 19. Juli 2012, 16:23 »
Liebe Freunde,

es geht wieder einmal um das Grundverständnis:

Kann ein \set-Befehl im Notentext an einzelnen Stellen abgeändert werden, wenn er in der \layout-Umgebung  steht ?
Das ist sehr verworren, nicht wahr?

Konkret geht es um
                                     \set Score.proportionalNotationDuration = #(ly:make-moment 1 8).
Ich stelle mir das als Grundeinstellung vor, weiß aber, dass es so nicht durchweg geht.

Wenn es eine Möglichkeit dafür gibt, bitte ich - wie immer - um einen code zum Übernehmen.

Gruß
chf

kilgore

  • Member
Re: \set-Befehl
« Antwort #1 am: Sonntag, 22. Juli 2012, 10:49 »
Hallo chf!

das \set-Befehl kann mit einem neuen \set-Befehl geändert werden, oder alternative mit \unset. \set und \unset sind ähnlich wie \override und \revert.

Ich kriege aber ein ERROR Meldung wenn ich versuche ein \set-Befehl im Context zu schreiben. Wie sieht dein Code aus?

Gruß
kil

\version "2.14.2"



\relative c' {
  \set Score.proportionalNotationDuration = #(ly:make-moment 1 4)
  c c c c  c c c c
  c c c c  c c c c

  \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
  c c c c  c c c c
  c c c c  c c c c

  \unset Score.proportionalNotationDuration
  c c c c  c c c c
  c c c c  c c c c
}

\layout {
  \context {
    \Score
    %\set Score.proportionalNotationDuration = #(ly:make-moment 1 4)
  }
}

chf

  • Member
Re: \set-Befehl
« Antwort #2 am: Sonntag, 22. Juli 2012, 10:58 »
Hallo Kilgore,

diese Fehlermeldung bekomme ich auch.
Danke für deine Antwort - sie bestätigt meine Ahnung, dass ich an der einzelnen Position arbeiten muss.

Gruß
chf

kilgore

  • Member
Re: \set-Befehl
« Antwort #3 am: Sonntag, 22. Juli 2012, 12:11 »
zum Glück kann man mit \set auch Kurzbefehle bauen :)

\version "2.14.2"

propSechs = \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)

\relative c' {
  \set Score.proportionalNotationDuration = #(ly:make-moment 1 4)
  c c c c  c c c c
  c c c c  c c c c

  \propSechs
  c c c c  c c c c
  c c c c  c c c c

  \unset Score.proportionalNotationDuration
  c c c c  c c c c
  c c c c  c c c c
}

\layout {
  \context {
    \Score
    %\set Score.proportionalNotationDuration = #(ly:make-moment 1 4)
  }
}

harm6

  • Member
Re: \set-Befehl
« Antwort #4 am: Sonntag, 22. Juli 2012, 13:51 »
Hallo,

ich hoffe ich kann im Folgenden ein paar Unklarheiten beseitigen.

Zunächst zur generellen Schreibweise.
context-properties werden in studlyCaps geschrieben. Also z.B.: fontSize, im Unterschied zum grob-property (font-size) bzw dem markup-command (fontsize).

Wo können sie gesetzt werden?:
Sie können in \layout, \with oder auch irgendwo in einer Stimme angegeben werden.

Zur Hierarchie:
Die Angabe im \layout erfolgt für alle angegebenen contexts.
Die Angabe im \with erfolgt nur für diesen context und überschreibt die eventuell erfolgte Setzung im \layout.
Die Angabe in der Stimme überschreibt die Angaben in \layout und \with.

Zum \layout und \with:
Das \layout hat die Form:
\layout {
  \context {
    \Score %% oder Staff, StaffGroup etc
    fontSize = #4
  }
}
\set ist nicht erforderlich. Auch nicht die Angabe eines contexts wie \set Score. <...>, denn sie ist durch \Score schon erfolgt. Dies gilt entsprechend auch für \with.

Angabe in der Stimme:
Nur hier wird \set benötigt.
Falls man auf die Angabe eines context verzichtet wird der "Bottom"-context benutzt. Das ist der context mit dem niedrigsten level, i.d.R also "Voice". z.B.: \set fontSize = #3
Falls man einen größeren Wirkungskreis haben möchte sollte man "Staff" oder "Score" wählen. z.B.: \set Score.fontSize = #3
Die Rücknahme erfolgt mit \unset ...
Eine einmalige Anwendung läßt sich mit vorangestelltem \once erreichen.


Ich habe ein hoffentlich erhellendes Beispiel angefügt.



HTH,
  Harm

\version "2.14.2"

\paper { indent = 30 }

staffGroupInstrumentName =
\markup {
        \fontsize #-3
        \override #'(line-width . 15)
        \wordwrap {
        Für die ganze StaffGroup wurde die fontSize
        im \typewriter "\\layout" festgelegt:
                \fontsize #-3
                \typewriter
                \column { "  \\layout {"
          "     \\context {"
          "         \\Score"
          "         fontSize = #3  "
          "      }"
          "  }"
                }
        }
}

staffMarkup = \markup {
        \fontsize #-3
        \override #'(line-width . 12)
        \wordwrap {
        Für diesen Staff wurde die fontSize
        in \typewriter "\\with" festgelegt:
                \fontsize #-3
                \typewriter
                " \\with { fontSize = #-4 }"
                Dies überschreibt die Angabe im \typewriter "\\layout"
                }
}

mrkpI = \markup {
        \fontsize #-13
        \override #'(line-width . 12)
        \override #'(baseline-skip . 2)
        \override #'(word-space . 0.5)
        \wordwrap {
        Hier wurde die fontSize überschrieben,
        \typewriter "\\set" ist erforderlich:
                \fontsize #-3
                \typewriter
                " \\set fontSize = #6      "
                Die Rücknahme erfolgt mit \hspace #5
                \fontsize #-3 \typewriter " \\unset fontSize"
                \hspace #4
                Dies überschreibt sowohl die Angabe im \typewriter "\\layout"
                als auch die in \typewriter "\\with"
                }
}

mrkpII = \markup {
        \fontsize #-17
        \override #'(line-width . 12)
        \override #'(baseline-skip . 2)
        \override #'(word-space . 0.7)
        \wordwrap {
        Hier wurde die fontSize einmalig überschrieben:
                \fontsize #-3
                \typewriter
                " \\once \set fontSize = #10      "
                Dies überschreibt ebenfalls sowohl die Angabe
                im \typewriter "\\layout"
                als auch die in \typewriter "\\with"
                }
}

mus = \relative c'' {
        c4^\staffMarkup c c c
        \set fontSize = #6
        c^\mrkpI c c c
        \unset fontSize
        c c c c
        \once \set fontSize = #10
        c^\mrkpII c c c
}

mus² = \relative c'' {
        \repeat unfold 4 { c c c c }
}

\score {
        \new StaffGroup \with { instrumentName = \staffGroupInstrumentName }
        <<
        \new Staff \with { fontSize = #-4 }
          \mus
        \new Staff
          \mus²
        >>
        \layout {
        \context {
                \Score
                fontSize = #3
        }
        }
}

chf

  • Member
Re: \set-Befehl
« Antwort #5 am: Sonntag, 22. Juli 2012, 16:24 »
Dank euch!
harms Erläuterung hilft mir sicher auch für andere Zusammenhänge,
und die Kurzbefehle ersparen viel Schreibarbeit.

chf