Autor Thema: Fehler in 2.18.2  (Gelesen 3794 mal)

erich

  • Member
Fehler in 2.18.2
« am: Mittwoch, 10. Juni 2015, 16:15 »
Hallo Lilypondies

Das Script
\version "2.18.2"

\score {
  <<
    \new Voice {c'4 e'-° }
  >>
}

wird korrekt interpretiert; lässt man jedoch das Käckchen am e fort, gibt es einen Fehler.

Frage: Tritt der Fehler auf bei der 2.19.-Version auf?

Gruß
Erich

fugenkomponist

  • Member
Re: Fehler in 2.18.2
« Antwort #1 am: Mittwoch, 10. Juni 2015, 20:16 »
Ja, dieses Verhalten* tritt auch bei 2.19.20 auf, man kann es aber leicht umgehen: e-"°". Gleiches gilt für e'-§ bzw. e-§. Es wundert mich, dass überhaupt manche Sonderzeichen als markup ohne Anführungszeichen angehängt werden können.

*Ich halte es nicht für einen Fehler, dass markups ohne Anführungszeichen in der Regel nicht funktionieren.

Ich hab ja das Gefühl, dass du aber eigentlich kein markup wolltest, sondern ein Flageolet oder „offen“ bei Hörnern o. ä. Dafür gibt es e'\flageolet bzw. e'\open.

Edit: Ich hab mich unklar ausgedrückt: Ich meine eigentlich speziell TextScripts, nicht allgemein Markups.
« Letzte Änderung: Mittwoch, 10. Juni 2015, 20:19 von fugenkomponist »

erich

  • Member
Re: Fehler in 2.18.2
« Antwort #2 am: Mittwoch, 10. Juni 2015, 23:02 »
LilyPond erwartet nach dem Minus-Zeichen (-) ein Artikulationszeichen genauso wie nach dem Unterstrich (_) oder dem Dach (^).
{e^°} lasst sich auch korrekt ausgeben, jedoch weder {e-°} noch {e_°}. Es scheint also doch ein Fehler zu sein.

Danke fugenkomponist für den Tipp zur Umgehung.

Wenn man nach einem Notennamen eine Dauer angibt, tritt der Fehler auch nicht auf.

Tatsächlich benutze ich das Grad-Zeichen auch nicht sondern den in der Mitte liegenden Punkt (·), der aber in Windows nicht so auf der Tastatur zur Verfügung zu stehen scheint wie in meinem Linux. Ich benutze eine Folge solcher Punkte zur Steuerung der Artikulation in der Midi-Ausgabe.

fugenkomponist

  • Member
Re: Fehler in 2.18.2
« Antwort #3 am: Donnerstag, 11. Juni 2015, 00:00 »
Aber ° ist doch gar kein Artikulationszeichen.* Genausowenig wie eben §. Laut NR 1.3.1 sind die verfügbaren Artikulationen

^, +, -, !, >, ., _ (in Version 2.19, ich glaub in 2.18 wars noch | statt !)

Also ist es nicht so verwunderlich, wenn ° sich nicht verwenden lässt wie ein Artikulationszeichen und kein Fehler von LilyPond. Dass e'-· zufälligerweise funktioniert, heißt nicht, dass e'_· oder e-· auch funktionieren müssen, weil es eben nicht beabsichtigt ist. Mit Anführungszeichen haben wir wieder definiertes Verhalten.

*Das lässt sich auch relativ leicht nachweisen:
\version "2.19.20"

\displayMusic { c'-. c'-· }
Dieser Code ergibt die folgende LilyPond-Ausgabe:
(make-music
  'SequentialMusic
  'elements
  (list (make-music
          'NoteEvent
          'articulations
          (list (make-music
                  'ArticulationEvent
                  'midi-extra-velocity
                  4
                  'midi-length
                  #<procedure #f (len context)>
                  'articulation-type
                  "staccato"))
          'duration
          (ly:make-duration 2)
          'pitch
          (ly:make-pitch 0 0))
        (make-music
          'NoteEvent
          'articulations
          (list (make-music
                  'TextScriptEvent
                  'text
                  "·"))
          'duration
          (ly:make-duration 2)
          'pitch
          (ly:make-pitch 0 0))))

Edit: gerade hab ich noch etwas interessantes entdeckt, nämlich den Befehl \displayLilyMusic:
\version "2.19.20"

\displayLilyMusic { c'-. c'-· }
ergibt die Ausgabe
{ c'4-. c'4-"·" }LilyPond ergänzt also die Anführungszeichen. Und damit lässt sich auch herausfinden, warum die anderen Dinge nicht gehen: Bei Vorhandensein von - oder _, aber ohne , oder ' schaltet LilyPond in den lyricmode: \displayLilyMusic { c-· }ergibt \lyricmode { c-· }Ich bin mir nicht ganz sicher, warum das passiert, aber dass es - und _, aber nicht ^ betrifft, ist relativ einfach zu erklären: die ersten beiden Zeichen haben im lyricmode nunmal ne Sonderbedeutung. Und ebenso deuten ' und , nach nem potentiellen Tonnamen auf Tonhöhen hin, weshalb es vermutlich im Notenmodus bleibt.
« Letzte Änderung: Donnerstag, 11. Juni 2015, 00:10 von fugenkomponist »

erich

  • Member
Re: Fehler in 2.18.2
« Antwort #4 am: Donnerstag, 11. Juni 2015, 00:27 »
Also fugenkomponist, dann nennen wir es eine Inkonsistenz; man wird doch LilyPond erweitern dürfen, oder wozu dient das LilyPond Snippet Repository.
Du zeigst doch selbt am Beispiel, dass displayMusic 'NoteEvent 'articulations ausgibt.

Als Mathematiker betrachte ich so eine Inkonsitenz unter formal-ästhetischen Gesichtspunkten als einen Fehler. Aber wir müssen hier kein Seminar über Korrektheit von Programmen beginnen.

Danke, dass Du geantwortet hast!

Erich


fugenkomponist

  • Member
Re: Fehler in 2.18.2
« Antwort #5 am: Donnerstag, 11. Juni 2015, 07:02 »
Also fugenkomponist, dann nennen wir es eine Inkonsistenz; man wird doch LilyPond erweitern dürfen, oder wozu dient das LilyPond Snippet Repository.
Ja, natürlich darf man, es ist auch tatsächlich möglich, neue Artikulationen zu definieren, soweit ich weiß. Aber das muss man halt erst einmal tun. Solche Inkonsistenzen gibts auch z. B. bei C/C++-Compilern. Manche Sachen sind nämlich laut Standard einfach „nicht definiertes Verhalten“, führen zu keinem Fehler, aber tun nichts vorhersagbares oder in verschiedenen Situationen verschiedenes. Ist also wohl üblich, wenn auch nicht unbedingt schön, da stimme ich dir zu ;)

Ich vermute, dass das Parsen so einfach wie möglich gemacht wurde, sodass alles, was definiert ist, auch funktioniert, aber eben nicht alles verboten wurde, was nicht funktioniert. Damit so Sachen wie „Liedtext braucht nicht für jede Silbe Anführungszeichen“ eben einfacher funktionieren.

Ich hätte nichts dagegen, wenn solche undefinierten Situationen vermieden werden, aber solange das nicht auch erklärtes Ziel der Entwickler ist, würde ich die Sache nicht als Fehler betrachten.
Zitat
Du zeigst doch selbt am Beispiel, dass displayMusic 'NoteEvent 'articulations ausgibt.
Ja, aber trotzdem ein TextScriptEvent, kein ArticulationEvent. Dass TextScripts in dieser Liste 'articulations stehen, scheint für mich eine ungünstige Benennung „articulations“ zu sein.
« Letzte Änderung: Donnerstag, 11. Juni 2015, 07:04 von fugenkomponist »

erich

  • Member
Re: Fehler in 2.18.2
« Antwort #6 am: Donnerstag, 11. Juni 2015, 08:06 »
@fugenkomponist

Ja, aber trotzdem ein TextScriptEvent, kein ArticulationEvent. Dass TextScripts in dieser Liste 'articulations stehen, scheint für mich eine ungünstige Benennung „articulations“ zu sein.
Dann nenn' es doch beim Namen! In deinen Augen ist es ein Fehler. Mir hingegen gibt es die Möglichkeit, Artikulationen zu erweitern.

Gruß
Erich