Forumsadmin gesucht! Details gibt’s in diesem Thread.

 

Hauptmenü

scheme, include-Dateien

Begonnen von Gerhrd, Samstag, 9. August 2025, 19:49

« vorheriges - nächstes »

Gerhrd

Liebe LilyPonder;
ich habe grundlegende Einstiegsprobleme:

Ich kann mit den LilyPond Grundfunktionen umgehen (zumindest ein bischen),
aber bei Scheme finde ich keinen Eingang.
Ich habe versucht über die Seiten hinter : https://lilypond.org/doc/v2.25/Documentation/extending/index#top
klug zu machen, es geligt mir nicht! Ich finde keinen grünen Faden. Wie habt Ihr den Einstieg gefunden?

Danke für Eure Hilfe!
Gerhard

harm6

Scheme oder genauer guile, ist die Programmiersprache die verwendet wird, wenn du custom-code zur Erweiterung von LilyPonds Funktionalität schreiben willst. Eigentlich also nichts für den Einstieg sondern im Gegenteil, für Fortgeschrittene ;)

Falls du Erfahrung mit anderen Programmiersprachen hast, kann das ein Vorteil sein. Tatsächlich kann es aber auch ein Nachteil sein: Ich habe öfter erfahrene Programmierer erlebt, die Schwierigkeiten mit guile hatten, da eben diese Vorerfahrung mit C++, python, etc die Akzeptanz von guile-Eigenheiten erschwert hat.
Ich selbst hatte keinerlei Programmierkenntnisse bevor ich zu LilyPond kam.

Nach meiner Erfahrung ist jedoch das Vermögen in guile zu programmieren nur ein Teil dessen was zum Erfolg nötig ist (oft sogar der kleinere Teil). Du brauchst idR auch das Wissen wo und wie LilyPond funktioniert, um an der richtigen Stelle deinen guile-code erfolgreich einzufügen. Meistens hakt es an dieser Stelle.

Das Extendig Manual ist da kein schlechter Einstieg. Ich selbst habe nach den dortigen Vorbildern geübt markup-commands, und Simple substitution functions zu schreiben. Einfach um mit allem vertrauter zu werden. Kann ich nur empfehlen. Also klein anfangen, es wird schon noch komplexer ;)

Der Titel dieses threads "include-Dateien" lässt mich vermuten, dass du dir bereits ein konkretes Projekt zum Ziel gesetzt hast. Beschreib es doch etwas genauer, sowie ein, zwei Probleme, die sich bei der Umsetzung ergeben. Vielleicht können wir assistieren.

Viele Grüße,
  Harm


Gerhrd

#2
Hallo Harm,
ja ich habe Programmiererfahrung: Assembler, Cobol, Pascal und Phyton.

Hier konkret zu meinem Anliegen:
Am Anfang meiner Datei steht ein Schnipsel:
inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \italic  #string #})

Will ich zu Beginn des Systems einen Text schreibe ich vor der ersten Note:
\inst "Var. 1"
und ich starte die Noten der ersten Variation.
Klappt wunderbar! Ich nenne das ein Makro. Es erspart mir jedesmal den vollen Code von oben.

War das erste Scheme oder guile? Und wie funktioniert das?

Solche Macros würde ich tatsächlich auslagern, da sie künftig bei jedem Musikstück auftauchen. Also eine include-Datei nutzen. Aber wie und wo? Du weißt, ich arbeite mit Frescobaldi und ich weiß, Du nicht! Zu dieser Frage also vielleicht ein anderer Wissender ??!!??

Was ich aber z.B. noch erreichen möchte:

Eine einfaches Notensystem :
\version "2.24.3"

guitar_a = %\set fingeringOrientations = #'(left)         
          <<
          % 1
          \set fingeringOrientations = #'(left)
          { <a-4>2        <g>            <e-0>         <f-1>4.       <e-0>8 <e> <d-4>   <c>  a <c-1>4    <b-0>       <c-1>   <b-0> <c-1> <d-4>    } \\
          \set fingeringOrientations = #'(left)
          { <fis,-1>2     <f>            <c-3>         <a>                  <f'-3>4     <d-0>  <g,-3>2               <c-3>4  <f-3>2.              } \\
          \set fingeringOrientations = #'(left)
          { r4  <c'-2 e-3> r <b-2 dis-3> <g d'-4> <c-1> <ais-3 cis-2> <a-3> <a-2 c-1>    <a>    <f-4 a-2> <f-3 gis-1> <e-2 g> <g>   <a-2> <gis-1>  }       
          >>
\score {
   
      \new Staff \with {
           \override InstrumentName.self-alignment-X = #LEFT
           instrumentName = \markup "Guitar"
           shortInstrumentName = ""
         }
         { \clef "treble_8"
           \relative c'' {
           \guitar_a
          }
      }
  }
 
Die zwei viertelPausen gehören zwischen fis und a bzw. f und g , nicht darüber.
Die Fingersatz-Ziffern sind hier enorm störend, da sie zu viel Platz einnehmen.
Zumal ist die "4" im Takt 2 vor dem d im Konflikt mit dem vorstehenden e. Auch die 1 vor dem f in Takt zwei steht im Konflikt mit dem Kreuz.
Schön ist freilich, dass die "2 3" davor für bessere Lesbarkeit etwas nach oben und unten verschoben sind.
In meinem anderen Notensetzprogramm (Capella) stelle ich häufig die Ziffern direkt über und unter die Note neben den Notenhals. Dort ist viel Platz, das Notenbild wird nicht gestreckt.

Ich denke, dafür muß ich eine Erweiterung in Form eines solchen Macros erstellen. Und dafür muß ich mich sicherlich um Scheme bemühen !!??!!

Grüße
Gerhard

PS: Die Pausen habe ich mit Hilfe von "\rest" auf die richtige Höhe gestellt!

PS.: Das Fingering ist mir auch (teilweise) geglückt.
  [/code]
\version "2.24.3"

voice_one = \relative c'
    {
    \stemUp
    \override Fingering.staff-padding = #'()
    \override Fingering.add-stem-support = ##f
    \partial
      8*3 g'8 a-2 b
      c2-1 c8. g16 e'8. b16
    }

voice_two = \relative c
    {
    \stemDown
    \override Fingering.staff-padding = #'()
    \override Fingering.add-stem-support = ##f
    \partial
      8*3 r8\mf r4
      c'8-3 g' e-2 g c,4 r
    }

\score {
        {
        <<
        \new Staff = "giuliani" <<
        \new Voice = "Ober-Stimme"  { \voice_one }
        \new Voice = "Unter-Stimme" { \voice_two }
                                >>   
        >>
        }
      }
  [/code]

Leider verstehe ich die overwrite-Befehle noch nicht. Auch die Erklärungen in der Lilypond-Dokumentation helfen mir nicht wirklich.
Ich würde auch gern bei abwärts gerichteten Hälsen die Bezifferung unter den Notenkopf stellen ??!!??

Manuela

Hat es einen Grund, warum du in deinem Codebeispiel alle Noten in spitze Klammern gesetzt hast? Das verwendet man normalerweise für Akkorde, und Lilypond behandelt den Fingersatz bei Akkorden etwas anders als bei Einzelnoten.

Bitte Code grundsätzlich Tags stellen, damit man ihn besser sehen und evtl. kopieren kann.

Und ja, ich gehöre auch zu denjenigen, die Programmiererfahrung hatten und sich deswegen mit Scheme schwertun.

Ich habe jetzt nicht den Rest durchgelesen, nur soviel zu den Pausen: wenn du nur in der 1. Stimme die Pause setzt und in den anderen Stimmen s verwendest (s wie skip), dann setzt Lilypond die Pausen automatisch an die richtige Höhe.
Danke für eure Hilfe
viele Grüße
-- Manuela

Gerhrd

Hallo Manuela.

ZitatHat es einen Grund, warum du in deinem Codebeispiel alle Noten in spitze Klammern gesetzt hast? Das verwendet man normalerweise für Akkorde, und Lilypond behandelt den Fingersatz bei Akkorden etwas anders als bei Einzelnoten.
Will ich den Fingersatz "vor" die Note stellen, muss ich auch Einzelnoten in spitze Klammern setzen. Irgendwann dachte ich, setze doch einfach alle Noten in spitze Klammern. Aber ich werde das wohl überdenken.

ZitatBitte Code grundsätzlich Tags stellen, damit man ihn besser sehen und evtl. kopieren kann.
War im unteren Beispiel auch meine Absicht.
Da ich eine Ergänzung geschrieben habe, konnte ich nicht auf obigen Symbole zugreifen und habe [\code] manuel eingegeben. Das führte dann zu dem erkennbaren Schriftbild.

Aber vielleicht kannst Du mir sagen, wo bei Frescobaldi das "\include" - Dateiverzeichnis zu finden ist, wie es üblicherweise heisst und wo es üblicherweise (bei Linux) im Systemverzeichnis eingebunden wird. In der über XML erstellten .ly Datei finde ich ein: "\include "articulate.ly", aber die drei Fragezeichen oben konnte ich nicht beantworten.

Danke, Gerhard