SVG

Begonnen von erich, Samstag, 13. Mai 2017, 11:35

« vorheriges - nächstes »

erich

Grüße alle!

Es ist mir bekannt, dass man einen eigenen Schlüssel in einer  PS-Datei vereinbaren kann und dann im Notentext verwenden kann.
Kann man inzwischen auch einen eigenen Schlüssel in einer SVG-Datei vereinbaren und dann verwenden?
Bis version 2.18 schien das nicht zu gehen;
Ich habe mir immer damit geholfen,
dass ich den Notentext nach SVG ausgegeben habe und diesen dann mit Inkscape (freies SVG-Graphik-Programm) bearbeitet habe.
Hat sich da etwas getan; wer weiß was

Erich

harm6

Hallo Erich,

wie hast Du denn den eigenen Schlüssel definiert und wie eingebunden um pdf zu erzeugen?

Mit anderen Worten: Code wäre schön ;)


Gruß,
  Harm

erich

#2
Hallo Harm

Ich habe den Schlüssel mit Inkscape erzeugt; die Datei lässt sich auch noch weiter auf reines SVG verkürzen; das Wesentliche in der Datei ist der Pfad am Ende.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

[code]<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
    xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   width="11.6"
   height="18.6">
   <g
     transform="translate(81.204829,-872.87289)"
     id="g4">
    <g
       transform="matrix(-0.34277567,0.02444436,0.01898269,0.44139855,152.3992,206.65339)"
       id="g6">
      <path
         d="m 751.94946,1487.3908 c 2.52,-0.72 10.71,-2.97 10.71,-10.17 0,-5.4 -7.74,-8.55 -15.21,-8.55 -1.53,0 -5.67,0 -9.45,2.25 -1.26,-0.81 -1.71,-1.17 -3.24,-2.25 -1.71,0 -1.71,0.09 -1.71,2.34 l 0,5.13 c 0,1.89 0,2.43 1.17,2.43 0.63,0 0.9,-0.36 1.08,-0.81 0.45,-1.62 0.99,-3.6 4.32,-5.22 3.06,-1.62 7.11,-1.62 7.47,-1.62 5.49,0 8.37,2.61 8.37,6.21 0,2.88 -1.53,5.22 -3.6,6.75 -2.79,2.25 -5.4,2.43 -8.1,2.61 -2.61,0.18 -2.79,0.18 -3.15,0.18 -0.81,0.09 -1.44,0.18 -1.44,1.08 0,0.99 0.54,0.99 2.34,0.99 l 4.95,0 c 8.46,0 10.53,5.22 10.53,9.36 0,9.36 -8.82,9.36 -10.71,9.36 -12.06,0 -12.51,-3.42 -12.78,-6.57 -0.09,-0.54 -0.54,-0.81 -1.08,-0.81 -1.17,0 -1.17,0.54 -1.17,2.43 l 0,5.13 c 0,2.25 0,2.34 1.71,2.34 l 2.7,-1.8 c 3.33,1.53 7.74,1.8 11.07,1.8 11.79,0 17.73,-6.3 17.73,-11.88 0,-5.4 -5.85,-9.45 -12.51,-10.71 z"
         id="path8"
         />
    </g>
  </g>
</svg>


Ich übersetze jedoch nicht nach PDF sondern binde die SVG-Dateien und zugehörige MP3-Dateien für meinen Server in HTML ein.
Kannst du damit etwas anfangen? ich würde auch noch weitere Erklärungen bringen.

Gruß
Erich

p.s. Ich habe die SVG-Datei um die sodopodi-Anteile gekürzt; ich hoffe es ist nicht zuviel weggeschmissen

harm6

svg-Dateien kannst Du nach wie vor nicht direkt verwenden.

Du könntest natürlich svg zu eps convertieren und dann als epsfile-markup verwenden...

Aber wäre es nicht besser erst gar nicht solche Umwege beschreiten zu müssen?

Im code unten habe ich Dein svg-file, genauer: den darin enthaltenen Pfad, be- und auf verschiedene Arten verarbeitet.
(Irgendwo ist mir dabei ein Fehler unterlaufen, deshalb ist die Grafik nicht ganz dieselbe wie bei Dir. Auch sind deshalb in der Anwendung ein paar Klimmzüge notwendig, aber zur Demonstration reicht es, imho.)

Zunächst habe ich das Ganze zu einem postscript-Pfad gemacht und den Clef durch ein postscript-markup ersetzt, einfach um noch mal zu demonstrieren, daß postscript für svg nicht funktioniert.
Dann habe ich daraus eine Liste gemacht, um sie dann einem path-markup zu übergeben.
Als letztes ein ganz simpler Pfad fürs path-markup, vor allem um das Prinzip deutlich zu machen.


\version "2.19.56"

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% postscript-markup (not feasable for svg)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

path =
#"
0.5 setlinewidth
%751.94946 1487.3908 rmoveto
-10 0 rmoveto


2.52 -0.72
10.71 -2.97
10.71 -10.17
rcurveto

0 -5.4
-7.74 -8.55
-15.21 -8.55
rcurveto

-1.53 0
-5.67 0
-9.45 2.25
rcurveto

-1.26 -0.81 
-1.71 -1.17
-3.24 -2.25
rcurveto

-1.71 0
-1.71 0.09
-1.71 2.34
rcurveto

0 5.13
rlineto

0 1.89
0 2.43
1.17 2.43
rcurveto

0.63 0
0.9 -0.36
1.08 -0.81
rcurveto

0.45 -1.62
0.99 -3.6
4.32 -5.22
rcurveto

3.06 -1.62
7.11 -1.62
7.47 -1.62
rcurveto

5.49 0
8.37 2.61
8.37 6.21
rcurveto

0 2.88
-1.53 5.22
-3.6 6.75
rcurveto

-2.79 2.25
-5.4 2.43
-8.1 2.61
rcurveto

-2.61 0.18
-2.79 0.18
-3.15 0.18
rcurveto

-0.81 0.09
-1.44 0.18
-1.44 1.08
rcurveto

0 0.99
0.54 0.99
2.34 0.99
rcurveto

4.95 0
rlineto

8.46 0
10.53 5.22
10.53 9.36
rcurveto

0 9.36
-8.82 9.36
-10.71 9.36
rcurveto

-12.06 0
-12.51 -3.42
-12.78 -6.57
rcurveto

-0.09 -0.54
-0.54 -0.81
-1.08 -0.81
rcurveto

-1.17 0
-1.17 0.54
-1.17 2.43
rcurveto

0 5.13
rlineto

0 2.25
0 2.34
1.71 2.34
rcurveto

2.7 -1.8
rlineto

3.33 1.53
7.74 1.8
11.07 1.8 
rcurveto

11.79 0
17.73 -6.3
17.73 -11.88
rcurveto

0 -5.4
-5.85 -9.45
-12.51 -10.71 
rcurveto

closepath

%stroke
fill
"

\new Staff {
  <>^ "Clef stencil with postscript-markup"
  \override Staff.Clef.stencil =
#(lambda (grob)
  (ly:stencil-translate-axis
  (ly:stencil-scale
    (grob-interpret-markup grob (markup #:postscript path))
    -0.05
    -0.05)
    -1
    Y))
   
  \key cis \major
  c'1
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% path-markup (works for svg)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

pathII =
#'(
(rmoveto -10 0)
(rcurveto 2.52 -0.72 10.71 -2.97 10.71 -10.17)
(rcurveto  0 -5.4 -7.74 -8.55 -15.21 -8.55)
(rcurveto -1.53 0 -5.67 0 -9.45 2.25)
(rcurveto -1.26 -0.81 -1.71 -1.17 -3.24 -2.25)
(rcurveto -1.71 0 -1.71 0.09 -1.71 2.34)
(rlineto 0 5.13)
(rcurveto 0 1.89 0 2.43 1.17 2.43)
(rcurveto 0.63 0 0.9 -0.36 1.08 -0.81)
(rcurveto 0.45 -1.62 0.99 -3.6 4.32 -5.22)
(rcurveto 3.06 -1.62 7.11 -1.62 7.47 -1.62)
(rcurveto 5.49 0 8.37 2.61 8.37 6.21)
(rcurveto 0 2.88 -1.53 5.22 -3.6 6.75)
(rcurveto -2.79 2.25 -5.4 2.43 -8.1 2.61)
(rcurveto -2.61 0.18 -2.79 0.18 -3.15 0.18)
(rcurveto -0.81 0.09 -1.44 0.18 -1.44 1.08)
(rcurveto 0 0.99 0.54 0.99 2.34 0.99)
(rlineto 4.95 0)
(rcurveto 8.46 0 10.53 5.22 10.53 9.36)
(rcurveto 0 9.36 -8.82 9.36 -10.71 9.36)
(rcurveto -12.06 0 -12.51 -3.42 -12.78 -6.57)
(rcurveto -0.09 -0.54 -0.54 -0.81 -1.08 -0.81)
(rcurveto -1.17 0 -1.17 0.54 -1.17 2.43)
(rlineto 0 5.13)
(rcurveto 0 2.25 0 2.34 1.71 2.34)
(rlineto 2.7 -1.8)
(rcurveto 3.33 1.53 7.74 1.8 11.07 1.8)
(rcurveto 11.79 0 17.73 -6.3 17.73 -11.88)
(rcurveto 0 -5.4 -5.85 -9.45 -12.51 -10.71)
(closepath))
     
\new Staff {
  \override Staff.Clef.stencil =
#(lambda (grob)
  (ly:stencil-translate-axis
  (ly:stencil-scale
    (grob-interpret-markup grob
      (markup #:override '(filled . #t) #:path 0 pathII))
    -0.05
    -0.05)
    -1
    Y))
   
  \key cis \major
  <>^ "Clef stencil with path-markup"
  c'1
}
   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% path-markup (works for svg)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\new Staff {
  <>^ "Clef stencil with basic path-markup"
\override Staff.Clef.stencil =
#(lambda (grob)
  (grob-interpret-markup grob
    #{
      \markup
            \path
              #0.5
              #'((rmoveto 0 -1)
                 (rlineto 0 -1)
                 (rlineto 1 0)
                 (rmoveto 0 2)
                 (rlineto -1 0)
                 (rlineto 0 -1)
                 (rlineto 1 0)
                 )
      #}))
  \key cis \major
  c'1
}


Pierre hat allerdings sehr viel mehr in dieser Richtung gearbeitet als ich.
Vielleicht liest er mit und kann mehr dazu sagen.


Gruß,
  Harm

erich

Danke Harm

dann werde ich also zur PS-Darstellung übergehen müssen! 
Das hatte ich schon mal gemacht, indem ich mit Hilfe von Inkscape eine PS-Datei erzeugt hatte;
ich hatte nur in Erinnerung, dass das insofern etwas mühsam war, weil ich die vielen Abkürzungen
aus der PS-Datei rausgeschmissenen hatte, um eine kurze Darstellung zu gewinnen.

Gruß
Erich


erich

#5
Hallo Harm,
ich bin von der Reise zurück und hab mein Glück hier versucht.
Die Lösung demonstriere ich an einem kleinen Beispiel

\version "2.19.52"
\include "nederlands.ly"
\include "dodecapitchnames.ly"

eClef =
#'(
    (moveto  2.75 5.758)
    (curveto 2.16 5.906 0.242 6.367 0.152 8.215)
    (curveto 0.082 9.601 1.828 10.515 3.551 10.625)
    (curveto 4.383 10.656 4.914 10.617 5.578 10.359)
    (curveto 5.992 10.199 6.273 10.004 6.625 9.593)
    (curveto 6.832 9.293 6.898 9.238 6.969 8.91)
    (curveto 6.992 8.425 7 8.289 6.73 8.273)
    (curveto 6.582 8.261 6.516 8.351 6.469 8.465)
    (curveto 6.344 8.871 6.195 9.375 5.406 9.742)
    (curveto 4.68 10.113 3.746 10.058 3.66 10.05)
    (curveto 2.395 9.972 1.766 9.261 1.812 8.34)
    (curveto 1.848 7.601 2.23 7.023 2.727 6.66)
    (curveto 3.398 6.121 4.004 6.113 4.629 6.105)
    (curveto 5.234 6.093 5.273 6.097 5.359 6.101)
    (curveto 5.547 6.09 5.691 6.078 5.703 5.847)
    (curveto 5.719 5.59 5.594 5.586 5.176 5.558)
    (lineto 4.035 5.488)
    (curveto 2.086 5.367 1.512 3.98 1.566 2.918)
    (curveto 1.641 1.265 2.828 0.812 4.188 0.769)
    (curveto 5.734 0.851 6.555 1.312 7 2.429)
    (curveto 7.012 2.57 7.293 2.769 7.418 2.777)
    (curveto 7.688 2.793 7.688 2.015 7.438 1.511)
    (curveto 7.18 1.066 6.945 0.812 6.512 0.55)
    (curveto 6.102 0.324 5.664 0.008 4.246 -0)
    (curveto 1.672 -0.004 0.074 1.398 0.004 2.832)
    (curveto -0.066 4.215 1.23 5.34 2.75 5.758)
    (moveto 2.75 5.758)
    (closepath))

#(ly:parser-set-note-names  dodecaPitchNames)

\paper{
  indent = 0\cm
  paper-width = 30\cm
  }
 

 
\score{
   
  \new Staff \with {\remove "Time_signature_engraver"
           \override StaffSymbol.line-positions = #'(  -2 2 6 10 )}
\new Voice {
  \override Staff.Clef.stencil =
#(lambda (grob)
  (ly:stencil-translate-axis
  (ly:stencil-scale
    (grob-interpret-markup grob
      (markup #:override '(filled . #t) #:path 0 eClef))
    0.4 0.4)
    -2.33 Y))
\time 2/2 < e'>2 <e' g'>2 }
 
  \layout {}
}


(leider kann ich z,Z. keine Graphik hier einbinden und nun doch!)

Nun meine Frage: ich hätte gerne den e-Schlüssel etwas weiter nach rechts gerückt. Ich dachte, das würde mit der ly:stencil-translate-axis - Funktion gehen, die rückt aber den Notentext nach links und nicht dem Schlüssel nach rechts.
Muss ich etwa den linken Abstand schon gleich bei der Definition des Schlüssels einprogrammieren oder gibt es einen bequemeren Weg?

Weißt Du eine Lösung

Gruß
Erich

harm6

Zitat(leider kann ich z,Z. keine Graphik hier einbinden)
Warum nicht?

Zitat
ich hätte gerne den e-Schlüssel etwas weiter nach rechts gerückt.
[...]
Muss ich etwa den linken Abstand schon gleich bei der Definition des Schlüssels einprogrammieren oder gibt es einen bequemeren Weg?

Da gibts verschiedene Möglichkeiten.
Schau mal ob
\override Score.LeftEdge.space-alist.clef = #'(extra-space . 0.8)
weiterhilft. 0.8 ist der default, vergrößere es.

Falls das nichts ist, meld' Dich noch mal.


Gruß,
  Harm

erich

#7
Hallo Harm

Zitat(leider kann ich z,Z. keine Graphik hier einbinden)
weil mein Netz gestört ist und ich nicht über meinen neuen userspace bei 1und1.de  verfügen kann.
Kann ich hier direkt Bilder hochladen? Ich hab sie bisher immer nur verlinkt.
Manuela hat mir erklärt, wie es geht; nun ist das Beispiel hier zu sehen.

Ich bin deinem Rat gefolgt, das hat aber leider nichts gebracht.

Gruß
Erich

Manuela

Zitat von: erich am Samstag, 20. Mai 2017, 07:21
Kann ich hier direkt Bilder hochladen? Ich hab sie bisher immer nur verlinkt.

Ja, kannst du. Du musst auf "Erweiterte Optionen" klicken, dann siehst du es  ;)
Danke für eure Hilfe
viele Grüße
-- Manuela

erich

Danke Manuela, ich hab das Beispiel nun angehängt.

harm6

Hallo Erich,


{
  \override Score.LeftEdge.space-alist.clef = #'(extra-space . 10)
  c'1 e'
}


funktioniert bei mir.

Es wird dann ohne Effekt bleiben, falls noch ein Grob zwischen LeftEdge und Clef angesiedelt ist, z.B.:

\layout {
  \context {
    \Voice
    \consists "Ambitus_engraver"
  }
}

{
  \override Score.LeftEdge.space-alist.clef = #'(extra-space . 10)
  c'1 e'
}


Du kannst natürlich die Abmessungen des neuen Clef-stencil ändern (vergrößern), ich würde aber den Weg über space-alist gehen. Erfahrungsgemäß hat man dann später weniger Ärger an anderer Stelle.

Somit, welches grob befindet sich bei Dir direkt links vom Clef?
Ein Code-Beispiel wäre auch schön ;)
Aber bitte ohne
\include "dodecapitchnames.ly"
und andere nicht im Beispiel definierte Variablen. ;)

Gruß,
  Harm

erich

#11
Danke Harm, nun klappt es:

\version "2.19.52"
\include "nederlands.ly"
\include "dodecapitchnames.ly"

eClef =
#'(
    (moveto  2.75 5.758)
    (curveto 2.16 5.906 0.242 6.367 0.152 8.215)
    (curveto 0.082 9.601 1.828 10.515 3.551 10.625)
    (curveto 4.383 10.656 4.914 10.617 5.578 10.359)
    (curveto 5.992 10.199 6.273 10.004 6.625 9.593)
    (curveto 6.832 9.293 6.898 9.238 6.969 8.91)
    (curveto 6.992 8.425 7 8.289 6.73 8.273)
    (curveto 6.582 8.261 6.516 8.351 6.469 8.465)
    (curveto 6.344 8.871 6.195 9.375 5.406 9.742)
    (curveto 4.68 10.113 3.746 10.058 3.66 10.05)
    (curveto 2.395 9.972 1.766 9.261 1.812 8.34)
    (curveto 1.848 7.601 2.23 7.023 2.727 6.66)
    (curveto 3.398 6.121 4.004 6.113 4.629 6.105)
    (curveto 5.234 6.093 5.273 6.097 5.359 6.101)
    (curveto 5.547 6.09 5.691 6.078 5.703 5.847)
    (curveto 5.719 5.59 5.594 5.586 5.176 5.558)
    (lineto 4.035 5.488)
    (curveto 2.086 5.367 1.512 3.98 1.566 2.918)
    (curveto 1.641 1.265 2.828 0.812 4.188 0.769)
    (curveto 5.734 0.851 6.555 1.312 7 2.429)
    (curveto 7.012 2.57 7.293 2.769 7.418 2.777)
    (curveto 7.688 2.793 7.688 2.015 7.438 1.511)
    (curveto 7.18 1.066 6.945 0.812 6.512 0.55)
    (curveto 6.102 0.324 5.664 0.008 4.246 -0)
    (curveto 1.672 -0.004 0.074 1.398 0.004 2.832)
    (curveto -0.066 4.215 1.23 5.34 2.75 5.758)
    (moveto 2.75 5.758)
    (closepath))

#(ly:parser-set-note-names  dodecaPitchNames)


\score{
   
  \new Staff \with {\remove "Time_signature_engraver"
           \override StaffSymbol.line-positions = #'(  -2 2 6 10 )}
  \new Voice {
       \override Staff.Clef.stencil =
#(lambda (grob)
  (ly:stencil-translate-axis
  (ly:stencil-scale
    (grob-interpret-markup grob
      (markup #:override '(filled . #t) #:path 0 eClef))
    0.4 0.4)
    -2.33 Y))
\override Score.LeftEdge.space-alist.clef = #'(extra-space . 4)
\time 2/2 < e'>2 <e' g'>2 }

  \layout {}
}


ZitatAber bitte ohne
\include "dodecapitchnames.ly"

mit denen arbeite ich aber im Beispiel. Das ist eine Notationsform, die schon mal von Wolf bzw. H. Riemann vorgeschlagen sein soll.
Gruß
Erich

harm6

Zitat
Zitat
    Aber bitte ohne
    \include "dodecapitchnames.ly"

mit denen arbeite ich aber im Beispiel. Das ist eine Notationsform, die schon mal von Wolf bzw. H. Riemann vorgeschlagen sein soll.
Diese Notennamen sind aber nicht Teil des hier vorgestellten Problems und können einfach weggelassen werden, genauso wie der ganze \with-Ausdruck, \time und Akkorde. Alles nicht Teil des Problems.

Auch führt der Kompilation Deines unveränderten Codes zu:

GNU LilyPond 2.19.56
Processing `atest-57.ly'
Parsing...
error: program too old: 2.19.56 (file requires: 2.19.59)
atest-57.ly:226:10: error: cannot find file: `dodecapitchnames.ly'
(search path: `/home/harm/lilydevel/usr/share/lilypond/current/fonts/svg/:/home/harm/lilydevel/usr/share/lilypond/current/fonts/type1/:/home/harm/lilydevel/usr/share/lilypond/current/fonts/otf/:/home/harm/lilydevel/usr/share/lilypond/current/scm:/home/harm/lilydevel/usr/share/lilypond/current/ps:/home/harm/lilydevel/usr/share/lilypond/current/ly:')
\include
         "dodecapitchnames.ly"
atest-57.ly:259:2: error: GUILE signaled an error for the expression beginning here
#
(ly:parser-set-note-names  dodecaPitchNames)
Unbound variable: dodecaPitchNames
Interpreting music...
Preprocessing graphical objects...
Finding the ideal number of pages...
Fitting music on 1 page...
Drawing systems...
Layout output to `atest-57.svg'...
fatal error: failed files: "atest-57.ly"


Nicht nur vernebelt dieses log das Problem, sondern ich muss die Notenname sowieso rausschmeissen, um das Beispiel erfolgreich zu kompilieren.

Also kannst Du doch gleich von vorn herein auf diese Notennamen verzichten, wenn Du das Problem hier vorstellst.


Gruß,
  Harm

erich

Hallo Harm,

ich will ja nichts behaupten, aber bei mir befindet sich die dodecapitchnames.ly-Datei im Ordner für die Sprachdefinitionen. Ich weiß nicht, ob ich sie irgendwann mal da hinein gespeichert habe; ich war der Meinung, die wäre standardmäßig dort.

Lilypond ist schön modular programmiert, aber woher kann ich von vornherein wissen, ob die Berechnungen gemäß  dodecapitchnames.ly auf das Layout keinen Einfluß haben; deshalb habe ich das kurze Notenbeispiel gewählt. Klar, die \time-Anweisung hätte fehlen können.

Nochmals vielen Dank
Erich

harm6

Zitat
ich will ja nichts behaupten, aber bei mir befindet sich die dodecapitchnames.ly-Datei im Ordner für die Sprachdefinitionen. Ich weiß nicht, ob ich sie irgendwann mal da hinein gespeichert habe; ich war der Meinung, die wäre standardmäßig dort.
Sie sind nicht Teil des source-code. Du wirst sie wohl irgendwann dort gespeichert haben. Beim nächsten upgrade werden sie aber überschrieben werden, also solltest Du entweder eine andere Methode wählen oder zumindest die Erinnerung daran behalten wie Du den source-code verändert hattest. ;)
Für mich kann ich sagen, daß die zweite Methode nicht funktionieren würde, Alzheimer lasst grüßen oder sowas lol

Zitat

Lilypond ist schön modular programmiert, aber woher kann ich von vornherein wissen, ob die Berechnungen gemäß  dodecapitchnames.ly auf das Layout keinen Einfluß haben
Das ist unwahrscheinlich aber nicht unmöglich.
Insoweit teste ich meine Beispiel immer mit und ohne solche includes, definitions, etc, etc
Letztendlich versuche ich ein Kurzbeispiel für ein Problem so kurz wie nur irgendmöglich zu machen, um Fremdeinflüsse auszuschließen. Dann eine Lösung für das Problem zu finden und erst im nächsten Schritt zu prüfen, ob es "im richtigen Leben" auch funktioniert.

Gruß,
  Harm