ChordNames zentrieren (gelöst)

Begonnen von Manuela, Donnerstag, 15. Juni 2017, 18:13

« vorheriges - nächstes »

Manuela

Hi,

normalerweise werden ChordNames nicht zentriert. Irgendwo habe ich eine Möglichkeit gefunden, dies zu erreichen.
Leider gibt es ein Problem, wenn z.B. im oberen Staff eine Sekund als Chord vorkommt. Ich vermute, dadurch verschiebt sich die Position von NoteColumn. Aus irgendeinem Grund wird der ChordName an der oberen NoteColumn ausgerichtet und nicht an der unteren. Wie erreichte ich, dass die Chords an den zugehörigen Noten ausgerichtet werden? Probeweise habe ich einen zweiten Context ChordNames unterhalb geschrieben, das hilft auch nichts.

Hier der Code:

\version "2.19.56"
\language "deutsch"

chExceptionMusic = {
  <c es g heses>1-\markup { "m" }
  <c es g b d'>1-\markup { "m" }
  <c es g b>1-\markup { "7" }
}

chExceptions = #(append
                 (sequential-music-to-chord-exceptions chExceptionMusic #t)
                 ignatzekExceptions)

\layout {
  \context {
    \RhythmicStaff
    fontSize = #-1
    \override StaffSymbol.staff-space = #(magstep -1)
  }
  \context {
    \ChordNames
    \override ChordName.X-offset =
    #ly:self-alignment-interface::aligned-on-x-parent
    \override ChordName.self-alignment-X = #CENTER
    chordNameLowercaseMinor = ##t
    chordNameExceptions = #chExceptions
    chordChanges = ##f
  }
}

firstNote =
#(define-music-function (music)
   (ly:music?)
   (event-chord-reduce music))

chordnotes = \chordmode {
  c4:m9 c4:m9
}
summe= {
  \once \override NoteHead.color = #red
  \firstNote \chordnotes
}

\score {
  \new GrandStaff
  <<
    \new Staff=melodie
    <<
      \new Voice \relative c'' { < c d >4 c }
    >>
    \new ChordNames \chordnotes
    \new RhythmicStaff
    <<
      \new Voice \summe
      \new ChordNames \chordnotes %% ist genau gleich ausgerichtet wie der obere ChordNames-context
    >>
  >>
}

Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Hallo Manuela,

mir ist Dein Begehr nicht ganz klar.

Allerdings werden ChordNames nie an der NoteColumn ausgerichtet sondern an der PaperColumn. Deren X-extent wird score-weit bestimmt.

Hinzu kommt, daß die angegebene Version 2.19.56, dort auch nicht alles richtig macht.

Mit selbst kompilierter 2.19.63 ergibt sich das Bild im Anhang. (Sollte aber schon mit 2.19.61 so sein.)
Ich habe jede Menge debugging output dazugeschaltet, aber hoffentlich wird klar, daß LilyPond exakt richtig arbeitet, imho.

Wenn Du da irgendwas anders haben willst, poste bitte ein Bild. Man kann ja mit extra-offset faken wie mans haben will.

Gruß,
  Harm

Manuela

#2
Danke für deine Antwort, Harm.

Zitat von: harm6 am Donnerstag, 15. Juni 2017, 22:34mir ist Dein Begehr nicht ganz klar.

Die Chordnamen sollen mittig an den Noten des unteren Rhythmic-Staffs ausgerichtet werden.

Zitat von: harm6 am Donnerstag, 15. Juni 2017, 22:34Allerdings werden ChordNames nie an der NoteColumn ausgerichtet sondern an der PaperColumn. Deren X-extent wird score-weit bestimmt.

Aha, das war mir nicht so klar, kann man das ändern, sodass sie sich an den Noten des Rhythmic-Staffs ausrichten? Indem man das X-Parent ändert?

Zitat von: harm6 am Donnerstag, 15. Juni 2017, 22:34Hinzu kommt, daß die angegebene Version 2.19.56, dort auch nicht alles richtig macht.

Ist wohl wieder ein Update fällig.

Zitat von: harm6 am Donnerstag, 15. Juni 2017, 22:34Wenn Du da irgendwas anders haben willst, poste bitte ein Bild.

Der rechte Chordname in meinem Beispiel ist so positioniert, wie ich es haben möchte.

Zitat von: harm6 am Donnerstag, 15. Juni 2017, 22:34Man kann ja mit extra-offset faken wie mans haben will.

Genau das wollte ich eigentlich vermeiden bei >60 Scores, wo dieser Fall durchschnittlich 2-3mal pro Score auftritt.
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Versuch mal:


  \context {
    \RhythmicStaff
    fontSize = #-1
    \override StaffSymbol.staff-space = #(magstep -1)
   
    \override NoteColumn.before-line-breaking =
      #(lambda (grob)
        (let* ((pap-col (ly:grob-parent grob X))
               (pap-col-elts (ly:grob-object pap-col 'elements))
               (chord-names
                 (if (ly:grob-array? pap-col-elts)
                     (filter
                       (lambda (elt)
                         (grob::has-interface elt 'chord-name-interface))
                       (ly:grob-array->list pap-col-elts))
                     '())))
          (for-each
            (lambda (chrd)
              (ly:grob-set-parent! chrd X grob))
            chord-names)))
  }


Musst Du aber noch testen.

Gruß,
  Harm


Manuela

#4
Zitat von: harm6 am Freitag, 16. Juni 2017, 11:25
Musst Du aber noch testen.

Danke Harm, werde ich testen, sobald ich Lily 2.19.63 installiert habe.

Ich gebe dann Rückmeldung, sobald ich Ergebnisse habe.
Danke für eure Hilfe
viele Grüße
-- Manuela

Manuela

#5
Soweit ich auf die Schnelle feststellen kann, funktioniert dein Code EINFACH GENIAL,

danke!!!!

Abgesehen davon dass Lilypond 2.19.62 bei der Installation einen Alarm bei meinem Virenscanner auslöst.
Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

Zitat von: Manuela am Freitag, 16. Juni 2017, 14:27
Abgesehen davon dass Lilypond 2.19.62 bei der Installation einen Alarm bei meinem Virenscanner auslöst.
off-topic: Sagt der, warum er was gegen LilyPond hat? Nicht, daß es da aus Versehen tatsächlich ein Problem gibt ...

Manuela

Zitat von: Malte am Freitag, 16. Juni 2017, 17:21off-topic: Sagt der, warum er was gegen LilyPond hat? Nicht, daß es da aus Versehen tatsächlich ein Problem gibt ...

Leider habe ich keinen Screenshot von der Meldung angefertigt. Ich habe jetzt sowohl das Programmverzeichnis als auch die Installationsdatei gescannt, kein Fund. Lilypond scheint auch ganz normal zu laufen.

Probehalber habe ich die Installation wiederholt, diesmal ohne Virenalarm.
Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

Hm, ok, dann wirds nicht so wild gewesen sein. Auch Virenprogramme machen mal Fehler ;) Wer weiß, vielleicht war der Grund einfach ,,extrem junge Software, könnte das ein ein bisher unbekannter Virus sein?" ... da kenn ich mich aber mit solchen Programmen nicht genug aus.

harm6

Zitat von: Manuela
Soweit ich auf die Schnelle feststellen kann, funktioniert dein Code EINFACH GENIAL,
Schön das zu hören. :)

Zitat
danke!!!!
Gern geschehen.

Zitat
Abgesehen davon dass Lilypond 2.19.62 bei der Installation einen Alarm bei meinem Virenscanner auslöst.
Ich lass mich jetzt nicht über Linux vs MS oder Mac aus.
Denn natürlich gibt es unter anderem deshalb kaum Viren die Linux befallen können, weil es für die Autoren solcher Viren weniger attraktiv ist auf eine kleine User-Gemeinde zu zielen.

Aber das Problem eines falsch-positiven Alarms ist schon öfter aufgetaucht.
Manchmal habe ich den Eindruck, die Virenschutzprogramme bringen durchaus ihre eigenen Probleme mit.
Und nicht zu knapp ...


Gruß,
  Harm

Malte

Zitat von: harm6 am Freitag, 16. Juni 2017, 23:31
Manchmal habe ich den Eindruck, die Virenschutzprogramme bringen durchaus ihre eigenen Probleme mit.
Und nicht zu knapp ...
Die sind doch selbst anscheinend ein beliebtes Angriffsziel, weil sie als dauerhafter Prozess mit ziemlich hohen Rechten im System rumfuhrwerken ...

Manuela

#11
Zitat von: Malte am Samstag, 17. Juni 2017, 00:18
Die sind doch selbst anscheinend ein beliebtes Angriffsziel, weil sie als dauerhafter Prozess mit ziemlich hohen Rechten im System rumfuhrwerken ...

Das wäre dann Computer-Aids  ;)

Ich konnte die Meldung bei der Installation auf einem anderen System (Windows 10) reproduzieren, hier die Meldung

Typ: Datei
Quelle: C:\Program Files (x86)\LilyPond\usr\bin\_hotshot.dll
Status: Infiziert
Quarantäne-Objekt: 0b24767e.qua
Wiederhergestellt: NEIN
Zu Avira hochgeladen: NEIN
Betriebssystem: Windows XP/VISTA Workstation/Windows 7
Suchengine: 8.03.44.66
Virendefinitionsdatei: 8.14.08.102
Gefunden: TR/Crypt.XPACK.Gen
Datum/Uhrzeit: 17.06.2017, 08:15

Typ: Datei
Quelle: C:\Program Files (x86)\LilyPond\usr\bin\_multibytecodec.dll
Status: Infiziert
Quarantäne-Objekt: 00023d98.qua
Wiederhergestellt: NEIN
Zu Avira hochgeladen: NEIN
Betriebssystem: Windows XP/VISTA Workstation/Windows 7
Suchengine: 8.03.44.66
Virendefinitionsdatei: 8.14.08.102
Gefunden: TR/Crypt.XPACK.Gen
Datum/Uhrzeit: 17.06.2017, 08:15


Update: ich habe einen neuen Thread zu diesem Thema eröffnet:

Viren(fehl)alarm bei Installation von 2.19.62 auf Windows 8/10
Danke für eure Hilfe
viele Grüße
-- Manuela

Manuela

So, nochmals eine Rückmeldung zum Code.

Ich bin noch immer begeistert, nach Durchsicht meines PDFs (über 106 Seiten) konnte ich keinen Fehler feststellen  :)
Danke für eure Hilfe
viele Grüße
-- Manuela