Text unter einer Note zentrieren

Begonnen von morgon, Donnerstag, 19. Oktober 2017, 21:01

« vorheriges - nächstes »

morgon

Hallo,

ich möchte unter den Noten die midi-Nummern ausgeben und möchte dass die zentriert unter der Note erscheinen.

Folgendes funktioniert nicht:


c'1_\markup { \center-align { "60" } }


Damit habe ich zwar eine 60 unter der Note, aber sie ist nicht bezüglich der Note zentriert, sondern etwas "off".

Wie geht das?

Danke!

Malte

Hallo morgon,

willkommen im Forum! Bitte lies diesen Beitrag und beachte in Zukunft vor allem die Hinweise zu Minimalbeispiel und Versionsangabe. (Dein Beispiel hier ist sehr klein, aber eigentlich zu klein, weil unvollständig.)

Die Lösung zu deinem Problem sieht folgendermaßen aus:
\version "2.19.65"

{
  \override TextScript.self-alignment-X = #CENTER
  \override TextScript.parent-alignment-X = #CENTER
  c'1_"abcdefgfedcba"
}

Dies sorgt dafür, daß die Mitte statt der linken Kante des Textes (self-alignment-X) an der Mitte statt der linken Kante des Notenkopfes (parent-alignment-X) ausgerichtet wird. Kommentiere die beiden Zeilen nacheinander aus, um die Wirkungsweise nachzuvollziehen ;)

morgon

#2
Danke für den Tip, leider funktioniert er bei mir nicht.

Hier ein vollständiges Beispiel:


\version "2.18.2"


\header {
  title = "C"
}

\score {

\new Staff {
  \tempo 4=300
  \time 8/1
  \omit Staff.TimeSignature
  \set Score.tempoHideNote = ##t
  \override TextScript.self-alignment-X = #CENTER
  \override TextScript.parent-alignment-X = #CENTER
  c'1_"60"
}

\midi {}
\layout {
}

}


Auch so ist die "60" nicht unter dem Notenkopf zentriert was ich gerne hätte...


EDIT:

Hier noch ein Minimalbeispiel:


\version "2.18.2"

{
  \override TextScript.self-alignment-X = #CENTER
  \override TextScript.parent-alignment-X = #CENTER
  c'1_"x"
}


Das x ist nicht zentral unter der Note.

harm6

Hallo morgon,

Zitat
Danke für den Tip, leider funktioniert er bei mir nicht.

"funktioniert nicht" kann vieles heißen...
Aber in Deinem Fall solltest Du eigentlich eine Warnung bekommen haben:
Zitat von: terminal
warning: cannot find property type-check for `parent-alignment-X' (backend-type?).  perhaps a typing error?
warning: skipping assignment
Denn 2.18.2 hat dieses property noch nicht. Malte hatte geantwortet ohne Deine Version zu kennen ;)
Ich versichere Dir ab 2.19.xx funktioniert es.

Insoweit wäre das einfachste ein upgrade auf die aktuelle devel Version oder Du wartest noch ein paar Wochen (die aktuelle devel-Version ist ein release-Kndidat für die neue stable 2.20.0)

Gruß,
  Harm

Falls Du nicht warten kannst so kann man die nötigen Berechnungen auch per Hand erledigen, wenns wirklich, wirklich sein muß.

morgon

Hallo,

"funktioniert nicht" soll eben heissen dass damit die Zentrierung des Textes nicht erreicht wird - aber Du hast Recht ich bekomme die warning.

Ist denn dieses neue feature die einzige Möglichkeit das zu erreichen, oder gäbe es für 2.18.2 eine andere Lösung?

Und wenn Malte als Lösung etwas vorschlägt das es offenbar erst in den devel-Versionen gibt (ich hatte ja usrprünglich keine Version genannt), heisst dass dann dass 2.19 inzwischen von den meisten benutzt wird?

harm6

Zitat
"funktioniert nicht" soll eben heissen dass damit die Zentrierung des Textes nicht erreicht wird
Ja, aber um weiter zu kommen ist es für die Helfenden oft von Interesse auf welche Art und Weise es nicht funktioniert. Z.B.:
- segfault
- (programming) error
- warning
mit welchem terminal-output?
Oder ist einfach nur die Grafik nicht ok?

Zugegeben, im konkreten Fall ist es offensichtlich. Aber eben nicht immer, insoweit bitte ich Dich demnächst solche terminal-messages zu posten (falls es sie gibt)

Zitat
Ist denn dieses neue feature die einzige Möglichkeit das zu erreichen, oder gäbe es für 2.18.2 eine andere Lösung?
Wie schon gesagt kann man den Wert um den das TextScript zu verschieben ist auch selbst berechnen, ja sogar durch audprobieren bestimmen.
Heut abend hab ich vielleicht die Zeit um das mal zu machen.

Zitat
Und wenn Malte als Lösung etwas vorschlägt das es offenbar erst in den devel-Versionen gibt (ich hatte ja usrprünglich keine Version genannt), heisst dass dann dass 2.19 inzwischen von den meisten benutzt wird?
Ich weiß nicht was von "den meisten" verwendet wird. Aber ohne Kenntnis der Version antworte ich mit der Version, die ich gerade benutze. Falls die Version genannt wird bemühe ich mich auch mit dieser Version zu antworten, auch wenn ich das manchmal vergesse.

Ganz generell ist 2.18.2 allerdings schon mehr als 3 Jahre alt insoweit würde es mich nicht überraschen wenn vielfach devel-Versionen genutzt werden, um Zugriff auf die neuen features zu haben.


Gruß,
  Harm

harm6


\version "2.18.2"

#(define center-grob-on-note-column
;; Returns a numerical value, which is supposed to be used for 'X-offset
  (lambda (grob)
    (let* (;; get the VerticalAxisGroup,
           ;; don't go for PaperColumn, because all NoteColumns would be catched
           (vert-axis-group (ly:grob-parent grob Y))
           (vert-axis-group-elts-array
             (ly:grob-object vert-axis-group 'elements))
           (note-column-list
             (if (ly:grob-array? vert-axis-group-elts-array)
                 (filter
                   (lambda (g) (grob::has-interface g 'note-column-interface))
                   (ly:grob-array->list vert-axis-group-elts-array))
                 '()))
           (note-column
             (if (pair? note-column-list)
                 (car note-column-list)
                 #f))
           (note-column-center
             (if note-column
                 (interval-center (ly:grob-extent note-column note-column X))
                 0))
           (stil (ly:grob-property grob 'stencil))
           (stil-center
             (interval-center (ly:stencil-extent stil X))))
    ;; move grob in X-direction:
    ;; half of NoteColumn-width to the rigth and half of its own width back
    ;; to the left
    (- note-column-center stil-center))))

{
  \override TextScript.X-offset = #center-grob-on-note-column
  c''1_"x|x"
}


HTH,
  Harm

morgon

Yep, das funktioniert, vielen Dank.

Gibt es eigentlich irgendwo ein Tutorial o.ä. für diese internals oder ist das was es auf lilypond.org als "Internals Reference" gibt alles?

Malte

#8
Ich habe das Gefühl, daß 2.19.xx schon von vielen verwendet wird, die gewisse Verbesserungen und neue Features verwenden wollen. Das ist auch in den meisten Fällen ohne Probleme möglich, weil die ,,unstable" Versionen gar nicht so instabil sind, wie der Name vermuten läßt. Aber für den Ottonormalverbraucher, der (aus welchen Gründen auch immer) lieber bei stabilen Versionen bleiben möchte, gibts bald gute Nachrichten, 2.20.0 nähert sich nämlich langsam der Veröffentlichung, ein erstes Prerelease (2.19.80) ist schon draußen.

Zum Thema Anleitungen: Abschnitt 5 der Notationsreferenz und die Dokumentation ,,LilyPond erweitern" könnten Anlaufstellen sein. Ansonsten hilft es, Code von anderen Nutzern zu lesen und möglichst Zeile für Zeile nachzuvollziehen.