Autor Thema: Anfängerfragen  (Gelesen 3131 mal)

Notensatzzweifel

  • Gast
Anfängerfragen
« am: Montag, 18. April 2016, 00:04 »
Hallo,

ich habe eher zufällig Lilypond ausprobiert. Wenn ich meine Noten via MusicXML nach Lilypond importiere, finde ich Lilypond sehr nutzerfreundlich für meine Fingersatzorgien.

Jetzt zu meinen Fragen:

1. Warum ist das Kreuz in Takt 6 unter dem Taktstrich, aber das Auflösungszeichen in Takt 15 hinter dem Taktstrich?
1a) Warum wird bei so tiefen Tönen bei einem linken Fingersatz die Note nicht nach rechts geschoben, aber bei höheren Noten schon. (Siehe Takt 4)

2. Warum ist das "i" in Takt 9 auf einer anderen Höhe als das "m" in Takt 10

Die Dateien, um die es geht sind im Anhang.

harm6

  • Gast
Re: Anfängerfragen
« Antwort #1 am: Montag, 18. April 2016, 22:09 »
Hallo Notensatzzweifel,

willkommen im Forum.

Ich habe aber Schwierigkeiten Deine Fragen zu beantworten.
Die dümmste Antwort ist:
Weil es so kodiert ist - wenn Du es genauer wissen willst studiere den source-code oder frage den Entwickler, der es implementiert hat.

Ich habe allerdings ernstliche Zweifel, daß eine solche Antwort auch nur in geringem Ausmasse zufriedenstellend ist ;)

Was willst Du wirklich?

Stört "das Kreuz in Takt 6 unter dem Taktstrich ..."? Soll das geändert werden?
Stört "das "i" in Takt 9 auf einer anderen Höhe als das "m" in Takt 10"? Soll das geändert werden?

Gruß,
  Harm

Notensatzzweifel

  • Gast
Re: Anfängerfragen
« Antwort #2 am: Montag, 18. April 2016, 23:20 »
Die Frage war, soll das so sein im Sinne von gutem Notensatz?
Habe ich etwas falsch gemacht?
Oder handelt es sich um einen Fehler.

Für das das i habe ich eine Lösung gefunden;

\override StrokeFinger.add-stem-support = ##t
Für das Kreuz wäre eine Lösung nett.

harm6

  • Gast
Re: Anfängerfragen
« Antwort #3 am: Dienstag, 19. April 2016, 01:07 »
Zitat
Für das Kreuz wäre eine Lösung nett.

Vor Takt 5:

\once \override Staff.BarLine.space-alist.next-note = #'(extra-space . 1.5)


HTH,
  Harm

Notensatzzweifel

  • Gast
Re: Anfängerfragen
« Antwort #4 am: Dienstag, 19. April 2016, 08:09 »
Danke. Woher weist Du, dass es es 1.5 sein muss? Erfahrung oder lesenswertes gutes Buch?

Letztendlich müsste man das aber automatisieren, weil alles was tiefer als A ist, Hals nach unten und alleine stehend, rutscht nach vorne. Das ist in Gitarrennoten so einiges.

Aber das ist momentan ein(ig)e Nummern zu hoch für mich.

fugenkomponist

  • Gast
Re: Anfängerfragen
« Antwort #5 am: Dienstag, 19. April 2016, 08:45 »
Ich würd mal sagen: Das hat harm ausprobiert. Es gibt aber eine andere Lösung, bei der du erstens gleich alle diese Fälle erwischst und dir zweitens keine Gedanken über genaue Werte machen musst, weil LilyPond das selbst findet:
\override Staff.BarLine.extra-spacing-height = #'(-3 . 0)Dies sorgt dafür, dass der Taktstrich für das Spacing/die Positionierung der anderen Dinge so wirkt, als wäre er nach unten 3 Zwischenräume länger. Dann werden Vorzeichen und Fingersätze (und mit ihnen Noten) so weit nach rechts verschoben, dass es da keine Kollisionen mit der (unsichtbaren) Verlängerung gibt. Nach oben geht das genauso, dafür musst du nur die zweite Zahl (ins Positive) ändern.

Ich hätte noch ein paar Fragen:
  • Warum nutzt du Version 2.10.33, hat das nen speziellen Sinn? Sinnvoller wärs, eine aktuelle Version wie 2.18.2 (stabil) oder 2.19.40 (Entwicklerversion) zu nutzen, da können dir hier mehr Leute mit helfen ;) Wobei, grad kommt mir, dass du ne neuere Version nutzen musst, du verwendest nämlich die aktuelle \override-Syntax … dann wärs aber gut, diese auch anzugeben.
  • Warum schreibst du \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)? Das brauchst du doch gar nicht, wo Sechzehntel doch sowieso schon die kürzesten auftretenden Dauern sind … Es hat auch keinen sichtbaren Effekt.
  • Die blauen Buchstaben, wofür sind die gut? (Hab keine Ahnung von Gitarrennotation.) Wenn du sonst keine anderen TextScripts hast, könntest du schonmal die Farbe (color) und die Höhe überm System (staff-padding) per \override für alle gleich ändern.

harm6

  • Gast
Re: Anfängerfragen
« Antwort #6 am: Dienstag, 19. April 2016, 09:25 »
Zitat von: fugenkomponist
Ich würd mal sagen: Das hat harm ausprobiert. Es gibt aber eine andere Lösung, bei der du erstens gleich alle diese Fälle erwischst und dir zweitens keine Gedanken über genaue Werte machen musst, weil LilyPond das selbst findet:
\override Staff.BarLine.extra-spacing-height = #'(-3 . 0)Dies sorgt dafür, dass der Taktstrich für das Spacing/die Positionierung der anderen Dinge so wirkt, als wäre er nach unten 3 Zwischenräume länger. Dann werden Vorzeichen und Fingersätze (und mit ihnen Noten) so weit nach rechts verschoben, dass es da keine Kollisionen mit der (unsichtbaren) Verlängerung gibt. Nach oben geht das genauso, dafür musst du nur die zweite Zahl (ins Positive) ändern.

Diese Lösung ist in der Tat sehr viel besser.

Zitat von: fugenkomponist
Die blauen Buchstaben, wofür sind die gut? (Hab keine Ahnung von Gitarrennotation.)

Nun bin ich zwar Gitarrist, doch ich kann diese Frage nicht beantworten. Zum Standard gehört es zumindest nicht.

Gruß,
  Harm

Notensatzzweifel

  • Gast
Re: Anfängerfragen
« Antwort #7 am: Dienstag, 19. April 2016, 10:03 »
Danke. Die blauen Sachen sind Privatsachen und ich habe da noch andere Sachen in anderen Farben.

Ich habe da als Vorlage eine ly-Datei aus dem Netz genutzt. Deswegen der falsche Stempel.

Aber wenn wir schon bei den blauen Sachen sind, wie kann ich daraus ein Scheme machen, sodass ich den Text nicht so aufblähe. Zusatzaufgabe, die Positionierung müsste beeinflussbar bleiben. Ich scheitere an der Syntax.

harm6

  • Gast
Re: Anfängerfragen
« Antwort #8 am: Dienstag, 19. April 2016, 11:05 »
Zitat
Aber wenn wir schon bei den blauen Sachen sind, wie kann ich daraus ein Scheme machen, sodass ich den Text nicht so aufblähe. Zusatzaufgabe, die Positionierung müsste beeinflussbar bleiben. Ich scheitere an der Syntax.

Mir ist unklar was Du haben willst.
Kannst Du einen pseudo-code posten wie Du es Dir vorstellst?

Gruß,
  Harm

Notensatzzweifel

  • Gast
Re: Anfängerfragen
« Antwort #9 am: Dienstag, 19. April 2016, 12:55 »
Danke.

Die Frage habe ich übersehen:
Zitat
Warum schreibst du \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)? Das brauchst du doch gar nicht, wo Sechzehntel doch sowieso schon die kürzesten auftretenden Dauern sind … Es hat auch keinen sichtbaren Effekt.

Übernommen aus einer Datei, bei der, obwohl der kleinste Notenwert 16 war,  es in meinen Augen eine fulminante positive Wirkung hatte.

Wenn mit Pseudocode meine Versuche gemeint sind, die sind schon gelöscht.

Ich habe hiermit probiert:

http://lilypond.org/doc/v2.18/Documentation/extending/new-markup-command-definition#a-complete-example

Dabei habe ich hinbekommen, mit was für Klammern ich wie und was translate with-color einklammern muss.

#(define-markup-command (Aus layout props) (markup?)
  "Draw a double box around text."
  (interpret-markup layout props
    #{\markup \ [color=red]with-color #blue[/color]
            \[color=red]translate  #.(3 . 4) [/color] { "A" }#}))

Wie muss ich die rotgefärbten Sachen schreiben?

Wie man die Variablen setzt, ist mir - glaube ich - klar.

#(define-markup-command (Aus layout props [color=green]x y[/color]) (markup?)
  "Draw a double box around text."
  (interpret-markup layout props
    #{\markup \ with-color #blue
            \translate  #.([color=green]#x .#y[/color]) { "A" }#}))



harm6

  • Gast
Re: Anfängerfragen
« Antwort #10 am: Dienstag, 19. April 2016, 20:23 »
Zitat
Wenn mit Pseudocode meine Versuche gemeint sind, die sind schon gelöscht.

Eigentlich hatte ich eher an die Syntax, sowie das gewünschte Ergebnis gedacht, d.h. z.B.:

Zitat
c''1-\my-function #my-arg-1 ...

soll folgendes Ergebnis zeitigen:
...


Wobei besonders interessant wäre, wie `my-function' angewendet wird (in meinem Beispiel als post-event) und wieviele Argumente `my-function' haben soll, sowie der Typ dieser Argumente.
Und natürlich welches Endergebnis.

Nicht funktioniert habende Versuche sind manchmal auch ok, da wir mitunter ablesen könnenm wohin die Reise denn gehen soll.


Du hast jetzt ein paar Versuche gepostet ein markup-command zu definieren.
Dieses markup-command ist gedacht als Zusammenfassung und damit Kurzschreibweise von anderen markup-commands.
Generell ziehe ich dafür eine scheme-function vor (siehe unten), aber es geht schon.

Dazu
(1) Jedes Argument braucht eine Typ-Abfrage? (fehlt teilweise, bzw manchmal ist eine Abfrage da, aber kein Argument)
(2) \translate braucht ein pair als Argument.
Entweder Du gibst ein pair (siehe scheme-function für ein Beispiel), oder Du konstruierst eins: (cons val-1 val-2)

Beispiel:

\version "2.18.2"

#(define-markup-command (Aus layout props x y arg) (number? number? markup?)
  "whatever doc-string"
  (interpret-markup layout props
    #{
      \markup \with-color #blue \translate  #(cons x y) $arg
    #}))
   
   
{
  c''1^\markup \Aus #-3 #4 "A"
  d''
}

Hier die scheme-function
\version "2.18.2"

foo =
#(define-scheme-function (parser location mrkp pair)(markup? pair?)
#{
  \markup { \with-color #blue \translate $pair $mrkp }
#})

fooI = \foo #"A" #'(0 . 4)
fooII = \foo #"R" #'(-3 . 4)
%% etc

{
  c''1^\fooII
  d''
}

Für das markup-command wäre es natürlich ebenfalls möglich standards vorzudefinieren.

HTH,
  Harm

P.S.
Innerhalb von [ c o d e ] kannst Du hier im Forum keine Farben setzen. Bitte kontolliere Deine posts auf solche Mißgeschicke, es vernebelt ansonsten was Du sagen willst und verringert Deine Chancen eine Antwort zu bekommen.
Man kann seine posts auch nachträglich editieren.
Falls Du Farben setzen willst dann in einfachem Text oder innerhalb [ q u o t e ].


Notensatzzweifel

  • Gast
Re: Anfängerfragen
« Antwort #11 am: Dienstag, 19. April 2016, 21:41 »
Sehr vielen Dank für deine Mühe. Ich muss es noch in Ruhe ausprobieren und verstehen.

Notensatzzweifel

  • Gast
Re: Anfängerfragen
« Antwort #12 am: Mittwoch, 20. April 2016, 08:57 »
Okay, das ist ziemlich genial.

Ich will daraus eine eierlegende Wollmilchsau machen.

\version "2.18.2"
foo =
#(define-scheme-function (parser location mrkp  color cons  number pair)(markup? color? cons? number? pair?  )
#{
  \markup {  \with-color  $color \magnify number\override  cons  \translate $pair $mrkp }
#})

fooA = \foo #"A" #blue  #'(0 . 4) #'(font-name . "Wingdings3") #0.7

%% etc

{
  c''1^\fooA

}

text-color habe ich selbst hinbekommen. Magnify und text-font nicht.

harm6

  • Gast
Re: Anfängerfragen
« Antwort #13 am: Mittwoch, 20. April 2016, 09:47 »
Das log gibt Hinweise wo Deine Funktion scheitert:
Zitat
[...]
Unbound variable: cons?
[...]
cons? ist nicht definiert und somit natürlich auch keine Typabfrage.

Wenn ich eine Funktion codiere fange ich häufig mit dem "Gerippe" an, d.h. keine Argumente (deshalb auch keine Typ-Abfragen). Alles ist hard-coded aber funktionsfähig. Hier wäre das:

(1)
\version "2.18.2"

fooStart =
#(define-scheme-function (parser location)()
#{
  \markup { 
    \with-color #blue
    \magnify #0.7
    \override #'(font-name . "Wingdings3")
    \translate #'(0 . 4)
    "A"
  }
#})

{
  c''1^\fooStart
}

parser und location sind obligatorische default-argumente. Erst in neueren devel-Versionen können sie weggelassen werden.

(2)
Dann setze ich nach und nach Variablen, sowie deren Typ-Abfragen. Im Aufruf dann natürlich auch.

Ich werde das mal Schritt für Schritt durchexerzieren. Hier zunächst das Text-Argument:

fooStepI =
#(define-scheme-function (parser location mrkp)(markup?)
#{
  \markup { 
    \with-color #blue
    \magnify #0.7
    \override #'(font-name . "Wingdings3")
    \translate #'(0 . 4)
    $mrkp
  }
#})

{
  c''1^\fooStepI "A"
}

(3)
Nun die Farbe.
Die korrepondierende Reihenfolge von Argumenten, deren Typ und deren späterer Aufruf ist notwendig. Vertausche da nichts.

fooStepII =
#(define-scheme-function (parser location mrkp clr)(markup? color?)
#{
  \markup { 
    \with-color $clr
    \magnify #0.7
    \override #'(font-name . "Wingdings3")
    \translate #'(0 . 4)
    $mrkp
  }
#})

{
  c''1^\fooStepII "A" #blue
}

(3)
Der Wert für \magnify

fooStepIII =
#(define-scheme-function (parser location mrkp clr mag-nmbr)(markup? color? number?)
#{
  \markup { 
    \with-color $clr
    \magnify #mag-nmbr
    \override #'(font-name . "Wingdings3")
    \translate #'(0 . 4)
    $mrkp
  }
#})

{
  c''1^\fooStepIII "A" #blue #0.7
}

(4)
Der font-name.
Hier ist der zweite Wert (der cdr) eines pair zu setzen.
Das halte ich hier für sinnvoller als ein koplettes pair im Funktionsaufruf anzugeben.
Da gibt es syntaktisch verschiedene Möglichkeiten. Hier zwei davon, eine auskommentiert.

fooStepIV =
#(define-scheme-function (parser location mrkp clr mag-nmbr font-name-string)(markup? color? number? string?)
#{
  \markup { 
    \with-color $clr
    \magnify #mag-nmbr
    \override #(cons 'font-name font-name-string)
    %% other syntax-possibility:
    %\override #`(font-name . ,font-name-string)
    \translate #'(0 . 4)
    $mrkp
  }
#})

{
  c''1^\fooStepIV "A" #blue #0.7 #"Wingdings3"
}

(5)
Der Wert für \translate.
Auch ein pair. Hier ist es jedoch sinvoll das pair im Aufruf komplett anzugeben und somit in der Funktion auch als solches einzufordern.

fooFinal =
#(define-scheme-function
  (parser location mrkp clr mag-nmbr font-name-string tr-val)
  (markup? color? number? string? pair?)
#{
  \markup { 
    \with-color $clr
    \magnify #mag-nmbr
    \override #(cons 'font-name font-name-string)
    %% other syntax-possibility:
    %\override #'(font-name . ,font-name-string)
    \translate #tr-val
    $mrkp
  }
#})

{
  c''1^\fooFinal "A" #blue #0.7 #"Wingdings3" #'(0 . 4)
}

Fertig!

Eine Schwierigkeit wird wahrscheinlich die Verwendung der Zeichen # und $ sein, was sie bedeuten, wo man welches setzen kann/muß bzw unter welchen Bedingungen man sie auch weglassen kann.
Das führt momentan aber zu weit ...

HTH,
  Harm

Notensatzzweifel

  • Gast
Re: Anfängerfragen
« Antwort #14 am: Mittwoch, 20. April 2016, 10:06 »
Super. Vielen Dank. Ich muss es erst einmal verdauen. Aber es ist genial.